/**
 * 配置打包文件的命名规则。
 *
 */
export default function build(env) {
  return {
    // 根据环境决定是否压缩代码
    minify: env.VITE_APP_ENV === "production" ? "terser" : false,
    terserOptions:
      env.VITE_APP_ENV === "production"
        ? {
            compress: {
              //生产环境时移除console.log(), console.info, console.warn, console.error, 或者直接赋值true移除一切console.*的代码
              drop_console: ["log", "warn", "error"],
              drop_debugger: true,
            },
          }
        : undefined,
    rollupOptions: {
      output: {
        /**
         * 定义入口文件的命名规则。
         * 使用[name]和[hash]作为占位符，分别代表文件名和文件内容的哈希值。
         * 这样可以确保每个入口文件都有一个唯一的名称，方便缓存管理。
         */
        entryFileNames: "js/[name]-[hash].js",
        /**
         * 定义块文件（即被多个入口文件共享的代码块）的命名规则。
         * 使用相同的命名规则作为入口文件，以保持文件命名的一致性和缓存友好性。
         */
        chunkFileNames: "js/[name]-[hash].js",
        /**
         * 定义资产文件（如图片、字体等）的命名规则。
         * 使用一个自定义函数来根据文件类型返回不同的命名规则，以更细致地控制不同类型的资产文件的输出位置和命名。
         */
        assetFileNames: (assetInfo) => {
          // 根据文件类型区分处理
          // 设置不同类型文件的输出路径及命名规则
          if (
            assetInfo.type === "asset" &&
            /\.(jpe?g|png|gif|svg)$/i.test(assetInfo.name)
          ) {
            /**
             * 图片文件的命名规则。 将图片文件输出到img目录下
             */
            return "img/[name].[hash].[ext]";
          }
          if (
            assetInfo.type === "asset" &&
            /\.(ttf|woff|woff2|eot)$/i.test(assetInfo.name)
          ) {
            /**
             * 字体文件的命名规则 将字体文件输出到fonts目录下
             */
            return "fonts/[name].[hash].[ext]";
          }
          /**
           * 其他类型的资产文件的命名规则。 对于不在上述图片和字体文件类型列表中的其他资产文件，使用一个通用的命名规则。
           */
          return "[ext]/chunkOther-[hash].[ext]";
        },
      },
    },
  };
}
